package com.xoa.dao.WFE;

import com.xoa.dao.base.BaseMapper;
import com.xoa.model.flowRunFeedback.FlowRunFeedback;
import com.xoa.model.workflow.FlowRunPrcs;
import com.xoa.model.workflow.FlowRunPrcsExcted;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;
import java.util.Map;

public interface WFEFlowRunPrcsMapper extends BaseMapper<FlowRunPrcs>{

    /**
     * 创建作者:   张勇
     * 创建日期:   2017/5/24 20:16
     * 方法介绍:   查询完结工作
     * 参数说明:
     * @return
     */
    public List<FlowRunPrcs>  selectEnd(Map<String, Object> maps);

    /**
     * 创建作者:   张勇
     * 创建日期:   2017/5/25 15:46
     * 方法介绍:   查询挂起工作
     * 参数说明:
     * @return
     */
    public List<FlowRunPrcs> selectHang(Map<String, Object> maps);

    /**
     * 创建作者:   张勇
     * 创建日期:   2017/5/25 17:04
     * 方法介绍:   查询所有工作
     * 参数说明:
     * @return
     */
    public List<FlowRunPrcs> selectAll(Map<String, Object> maps);

    /**
     * 创建作者:   张勇
     * 创建日期:   2017/6/1 10:45
     * 方法介绍:   查询上一步办结时间
     * 参数说明:
     * @return
     */
    public String findTime(@Param("prcsId") Integer prcsId, @Param("runId") Integer runId);



    /**
     * 创建作者:   张勇
     * 创建日期:   2017/6/1 10:45
     * 方法介绍:   查询上一步办结时间
     * 参数说明:
     * @return
     */
    public String findTimeBy(Map<String, Object> maps);

    /**
     * 创建作者:   张龙飞
     * 创建日期:   2017/6/1 17:03
     * 方法介绍:   根据runId查询流程实例步骤信息
     * 参数说明:
     * @return
     */
    public List<FlowRunPrcs> findByRunId(Integer runId);
    /**
     * 创建作者:   张龙飞
     * 创建日期:   2017/6/2 11:44
     * 方法介绍:   根据流程实例Id和流程实例步骤id查询
     * 参数说明:
     * @return
     */
    public List<FlowRunPrcs> selectfrp(Map<String, Object> maps);

    public List<FlowRunPrcs> findByRunIdTopFlag (Map<String, Object> maps);

    //转交时查询出所有上一步记录（不区分主办经办）
    public List<FlowRunPrcs> selectfrp1(Map<String, Object> maps);

    int deleteByPrimaryKey(Integer id);

    int insert(FlowRunPrcs record);

    FlowRunPrcs selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(FlowRunPrcsExcted record);

    int updateByPrimaryKey(FlowRunPrcs record);

    int updateSome(Map<String, Object> map);
    //根据id修改状态值
    int updateFrpById(FlowRunPrcs flowRunPrcs);
    //会签
    int updateHandle(Map<String, Object> map);

    //会签
    int updateHandleWithComment(Map<String, Object> map);

    /**
     * 创建作者:   张勇
     * 创建日期:   2017/6/20 13:49
     * 方法介绍:   删除第一步
     * 参数说明:
     * @return
     */
    public void deleteWork(FlowRunPrcs flowRunPrcs);

    /**
     * 创建作者:   张勇
     * 创建日期:   2017/6/20 13:50
     * 方法介绍:   查询是否为第一步
     * 参数说明:
     * @return
     */
    public Integer selectPrcs(@Param("id") Integer id);

    public List<FlowRunPrcs> findlessRunId(Map<String, Object> maps);

    /**
     * 创建作者:   张勇
     * 创建日期:   2017/7/14 14:08
     * 方法介绍:   根据用户登录帐号和经办流程流水号查询该条所有信息
     * 参数说明:
     * @return
     */
    public List<FlowRunPrcs> selectMyAll(@Param("userId") String userId, @Param("runId") Integer runId);


    List<FlowRunPrcs> selectAllByRunId(Integer runId);


    List<FlowRunPrcs> getFlowRunReacsAllByRunId(String runId);

    FlowRunPrcs selectqueryByRunId(@Param("prcsId") String prcsId, @Param("runId") Integer runId);


    int cancelRunPrcs(Map<String, Object> map);

    FlowRunPrcs queryByRunId(@Param("runId") Integer runId);

    int deleteByRunIds(List<Integer> runIds);


    /**
     * 创建作者:   张勇
     * 创建日期:   2017/5/25 17:04
     * 方法介绍:   查询委托工作
     * 参数说明:
     * @return
     */
    public List<FlowRunPrcs> entrustWork(Map<String, Object> maps);


    /**
     * 创建作者:   zlf
     * 创建日期:   2017/11/9 17:04
     * 方法介绍:   查询是否强制转交
     * 参数说明:
     * @return
     */
    public Integer checkGatherNode(Map<String, Object> maps);

    public Integer checkBranchCount(Map<String, Object> maps);


    public List<FlowRunPrcs> monitoring(Map<String, Object> maps);



    public List<FlowRunPrcs> findNextFrp(Map<String,Object> maps);

    public List<FlowRunPrcs> findMaxFrp(Integer runId);

    public List<FlowRunPrcs> selByRunId(Integer runId);

    /**
     * 查询具体步骤，在委托中使用
     * @param flowRunPrcs
     * @return
     */
    public FlowRunPrcs selSpecificStep(FlowRunPrcs flowRunPrcs);

    /**
     * 创建作者:   张龙飞
     * 创建日期:   2018/1/18
     * 方法介绍:   工作结束
     * 参数说明:
     * @return
     */
    int updateEnd(Map<String,Object> map);

    /**
     * 创建作者:   zlf
     * 方法介绍:   按条件查询
     * 参数说明:
     * @return
     */
    public List<FlowRunPrcs> selectFind(Map<String, Object> maps);



    public void deleteBycondition(Map<String, Object> maps);


    /**
     * 创建作者:   zlf
     * 方法介绍:   查询制定步骤
     * 参数说明:
     * @return
     */
    public List<FlowRunPrcs> selectStep(Map<String, Object> maps);

    /**
     * 作者: 张航宁
     * 日期: 2018/3/2
     * 说明: 查询指定时间待办总数
     */
    FlowRunPrcs selectObjectCounts (Map<String, Object> map);

    /**
     * 作者: 张航宁
     * 日期: 2018/3/2
     * 说明: 查询指定时间办结总数
     */
    FlowRunPrcs selectEndCounts (Map<String, Object> map);

    FlowRunPrcs getLastPrcsByRunId(Integer runId);


    public List<FlowRunPrcs> selectOp(Map<String, Object> maps);


    public void updateOpflag(Map<String, Object> maps);

    int updatePrcsFlag(Map<String, Object> maps);

    List<FlowRunPrcs> selectCondition(Map<String, Object> maps);


    public int upPrcsStatusById(FlowRunPrcs flowRunPrcs);

    public List<String> getFrpRunId(String userId);
    //根据prcs_id和flow_prcs查询会签意见
    public List<FlowRunFeedback> selFeedBack(Map map);


    List<FlowRunPrcs> selEndRunId(Map<String,Object> map);

    FlowRunPrcs selectPrcsId(@Param("runId") Integer runId);

    List<FlowRunPrcs> selectPrcsId1(@Param("runId") Integer runId);

    int updateGather(Map<String, Object> map);
    //获取当前人的委托。
    List<FlowRunPrcs> getEntrustWorkList(Map map);

    public Integer checkBranch(Map<String, Object> maps);

    int updatePrcsId(Map<String, Object> map);

    int updateParent(Map<String, Object> map);

    int updateParentPrcsFlag(Map<String, Object> map);

    List<FlowRunPrcs> selectWFBack(Map<String,Object> map);

    //已超时工作查询
    public List<FlowRunPrcs> selectTimeOut(Map<String, Object> maps);
    //更改超时状态值
    public int upTimeOutFlagById(FlowRunPrcs flowRunPrcs);
    //查询含有办理时限的数据
    public List<FlowRunPrcs> selectAllTime();
    //判断当前是否结束流程  and  是否可以转交
    List<FlowRunPrcs> getFlowRunReacsAllByRunIdEnd(String runId);

    public List<FlowRunPrcs> getAssignData(Map<String, Object> maps);

    List<FlowRunPrcs> selectWorkDocument(Map<String,Object> maps);
    //是公文的话查询公文相关信息
    Integer selectBolDocument(Integer runId);

    public List<FlowRunPrcs> getfrpByrollBack(Map<String, Object> maps);

    @Select("select user_id from flow_run_prcs where flow_prcs =#{flowPrcs} and run_id =#{runId} and OP_FLAG = 1 order by prcs_id desc,OP_FLAG DESC  limit 0,1;")
    String getUserIdByMaxFlowPrcs(@Param("flowPrcs") Integer flowPrcs,@Param("runId") Integer runId);

}